﻿#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include <time.h>

//1.随机100000条数据，随机出的数字1-1000之间，写入到文件中。然后再读取出来，进行从小到大的排序，最后再写入到文件中。

//main151&152&153：文本文件写入随机数再读取排序写入最后读取统计数字次数写入
int main151()
{
	srand((unsigned int)time(NULL));
	FILE* fp = fopen("../../../file/FileDataSort.txt", "w");
	if (!fp)
	{
		return -1;
	}
	for (int i = 0; i < 100000; i++)
	{
		fprintf(fp, "%d\n", rand() % 1000 + 1);//362 ... 781
	}
	fclose(fp);

	system("pause");
	return EXIT_SUCCESS;
}
int main152(void)
{
	//2.记录一下处理100000条数据的用时长；
	unsigned int start_time = time(NULL);
	FILE* fp = fopen("../../../file/FileDataSort.txt", "r");
	if (!fp)
	{
		return -1;
	}
	int* p = (int*)malloc(sizeof(int) * 100000);

	for (int i = 0; i < 100000; i++)
	{
		fscanf(fp, "%d\n", &p[i]);
		printf("%d-----%d\n", i, p[i]);// ... 99998-----756  99999-----781
	}

	for (int i = 0; i < 100000 - 1; i++)
	{
		for (int j = 0; j < 100000 - i - 1; j++)
		{
			if (p[j] > p[j + 1])
			{
				int temp = p[j];
				p[j] = p[j + 1];
				p[j + 1] = temp;
			}
		}
	}

	fclose(fp);
	fp = fopen("../../../file/FileDataSortWrite.txt", "w");
	if (!fp)
	{
		return -1;
	}
	for (int i = 0; i < 100000; i++)
	{
		fprintf(fp, "%d\n", p[i]);
	}
	fclose(fp);
	free(p);

	unsigned int end_time = time(NULL);
	printf("3.处理100000条数据，总共花费时长为：%d（s）", end_time - start_time);//72（s）

	return 0;
}
int main153(void)
{
	unsigned int start_time = time(NULL);
	FILE* fp = fopen("../../../file/FileDataSort.txt", "r");
	if (!fp)
	{
		return -1;
	}

	int arr[1000] = { 0 };
	int value;
	for (int i = 0; i < 100000; i++)
	{
		//5.使用数组记录随机数出现的次数，如arr[998]=5，999出现了5次。value=999,arr[999-1]=arr[998]=5；
		fscanf(fp, "%d\n", &value);
		arr[value - 1]++;
		printf("%d-----%d\n", i, value);//... 99998-----756 99999-----781
	}
	fclose(fp);
	fp = fopen("../../../file/FileDataSortArrWrite.txt", "w");
	if (!fp)
	{
		return -1;
	}
	long sum = 0;
	for (int i = 1; i <= 1000; i++)
	{
		printf("6.输出1-1000分别出现的次数：%d-----%d\n", i, arr[i - 1]);//1000-----113
		//6.输出1-1000分别出现的次数：1-----111	... 1000-----106
		sum += arr[i - 1];
		//8.将1-1000,即i写入到文件FileDataSortArrWrite.txt中，这里需要重新打开文件；
		for (int j = 0; j < arr[i - 1]; j++)
		{
			fprintf(fp, "%d\n", i);
		}
	}
	printf("7.1-1000中的每个数，出现的次数，总共加起来应该是100000。此时，sum为：%d\n", sum); //100000
	fclose(fp);

	unsigned int end_time = time(NULL);
	printf("4.处理100000条数据，总共花费时长为：%d（s）", end_time - start_time);//39（s）
	return 0;
}